home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / bc_ti.zip / TI730.ASC < prev    next >
Text File  |  1992-02-25  |  14KB  |  463 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.   PRODUCT  :  Borland C++                            NUMBER  :  730
  9.   VERSION  :  2.0
  10.        OS  :  DOS
  11.      DATE  :  February 25, 1992                        PAGE  :  1/7
  12.  
  13.     TITLE  :  Example Source Code for TEMC Filter
  14.  
  15.  
  16.  
  17.  
  18.   /*
  19.        EXAMPLE SOURCE CODE FOR TEMC FILTER
  20.  
  21.        TEMC2MSG.C
  22.  
  23.        TEMC2Msg - output filter to Turbo C++ IDE message window
  24.             This filter accepts input through the standard input
  25.             stream, converts it and outputs it to the standard
  26.             output stream.  The streams are linked through pipes,
  27.             such that the input stream is the output from the
  28.             assembler being invoked, and the output stream is
  29.             connected to the message window of the Turbo C++ IDE,
  30.             ie. temc fname configname | temc2msg | Turbo C++
  31.             message window
  32.  
  33.        Compile using Turbo C++ in the LARGE memory model
  34.             tcc -ml temc2msg
  35.   */
  36.  
  37.   #include <dir.h>
  38.   #include <dos.h>
  39.   #include <stdlib.h>
  40.   #include <fcntl.h>
  41.   #include <string.h>
  42.   #include <alloc.h>
  43.   #include <io.h>
  44.   #include <ctype.h>
  45.   #include "filter.h"
  46.  
  47.   #define TRUE (1 == 1)
  48.   #define FALSE !(TRUE)
  49.  
  50.   /* Turbo TEMC text for conversion */
  51.   char TemcWarningTxt[] = "Warning ";
  52.   char TemcErrorTxt[]   = "Error ";
  53.   char TemcFatalTxt[]   = "Fatal ";
  54.  
  55.   char     CurFile[MAXPATH];       /* Current file in message
  56.   window */
  57.   unsigned BufSize,                /* Size of internal working
  58.   buffer */
  59.            CurBufLen;              /* Buffer space in use */
  60.   char     *InBuffer,              /* Input buffer */
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.   PRODUCT  :  Borland C++                            NUMBER  :  730
  75.   VERSION  :  2.0
  76.        OS  :  DOS
  77.      DATE  :  February 25, 1992                        PAGE  :  2/7
  78.  
  79.     TITLE  :  Example Source Code for TEMC Filter
  80.  
  81.  
  82.  
  83.  
  84.            *OutBuffer,             /* Output buffer */
  85.            *CurInPtr,              /* current character in input
  86.                                       buffer */
  87.            *CurOutPtr,             /* current character in output*/
  88.            *LinePtr;               /* pointer to the current
  89.                                       character in the input
  90.                                       buffer*/
  91.   int      (*processor)(char *);   /* function pointer used to call
  92.                                       the appropriate conversion
  93.                                       routine */
  94.   char     Line[133];              /* static buffer to store line
  95.                                       most recently input */
  96.   long int InOff;                  /* position in actual input
  97.                                       stream */
  98.   char     EndMark;                /* Used to output end of data to
  99.   message
  100.                                       window */
  101.  
  102.   /*************************************************************************
  103.   Function  : NextChar
  104.   Parameters: none
  105.   Returns   : next character in input buffer or 0 on end of file
  106.  
  107.   Input from the standard input stream is buffered in a global
  108.   buffer InBuffer which is allocated in function main.  The
  109.   function will return the next character in the buffer, reading
  110.   from the input stream when the buffer becomes empty.
  111.   **********************************************************************/
  112.   char NextChar(void)
  113.   {
  114.     if (CurInPtr < InBuffer+CurBufLen)  /* if buffer is not empty*/
  115.     {
  116.       return *(CurInPtr++);             /* return next character */
  117.     }
  118.     else
  119.     {
  120.       CurInPtr = InBuffer;              /* reset pointer to front
  121.                                            of buffer */
  122.       lseek(0,InOff,0);                 /* seek to the next section
  123.                                            for read */
  124.       InOff += BufSize;                 /* increment pointer to
  125.                                            next block */
  126.       if ((CurBufLen = read(0,InBuffer,BufSize)) !=0)
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.   PRODUCT  :  Borland C++                            NUMBER  :  730
  141.   VERSION  :  2.0
  142.        OS  :  DOS
  143.      DATE  :  February 25, 1992                        PAGE  :  3/7
  144.  
  145.     TITLE  :  Example Source Code for TEMC Filter
  146.  
  147.  
  148.  
  149.  
  150.         return NextChar();              /* recursive call merely
  151.                                            returns first character
  152.                                            in buffer after read */
  153.       return 0;                         /* return 0 on end of
  154.                                            file*/
  155.     }
  156.   }
  157.  
  158.   /*************************************************************************
  159.   Function  : flushOut
  160.   Parameter : Size   The number of characters to be written out
  161.   Returns   : nothing
  162.  
  163.   Strings to be sent to the message window are buffered in a buffer
  164.   called OutBuffer.  A call to this function will write out Size
  165.   bytes from OutBuffer to the standard output stream and resets the
  166.   output buffer pointer to the beginning of the buffer.  The output
  167.   buffer is considered empty after a call to this function.
  168.   ***********************************************************************/
  169.   void flushOut(unsigned Size)
  170.   {
  171.      if (Size != 0)                /* don't flush an empty buffer*/
  172.      {
  173.         CurOutPtr = OutBuffer;     /* reset pointer to beginning of
  174.                                       buffer */
  175.         lseek(1,0,2);              /* seek output stream to end */
  176.         write(1,OutBuffer,Size);   /* write out Size bytes */
  177.      }
  178.   }
  179.  
  180.   /************************************************************************
  181.   Function  : Put
  182.   Parameters: S    pointer to bytes being put into output buffer
  183.               Len  number of bytes to be put in output buffer
  184.   Returns   : nothing
  185.  
  186.   Put places bytes into OutBuffer so they may be later flushed out
  187.   into the standard output stream.
  188.   ***********************************************************************/
  189.   void Put(char *S,int Len)
  190.   {
  191.      int i;
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.   PRODUCT  :  Borland C++                            NUMBER  :  730
  207.   VERSION  :  2.0
  208.        OS  :  DOS
  209.      DATE  :  February 25, 1992                        PAGE  :  4/7
  210.  
  211.     TITLE  :  Example Source Code for TEMC Filter
  212.  
  213.  
  214.  
  215.  
  216.      for (i = 0; i < Len; i++)
  217.      {
  218.         *CurOutPtr++ = S[i];             /* place byte in buffer */
  219.         if (CurOutPtr >= OutBuffer+BufSize)/* if buffer overflows*/
  220.            flushOut(BufSize);               /* flush the buffer */
  221.      }
  222.   }
  223.  
  224.   /*************************************************************************
  225.   Function  : ProcessLine
  226.   Parameters: Line  a pointer to the current line of characters to
  227.                     process
  228.   Returns   : 1 if line is a Turbo Assembler line
  229.               0 if line is not
  230.  
  231.   Process through a line of input to determine if it is a Turbo
  232.   Assembler output line and convert it to information for the Turbo
  233.   C++ message window.
  234.  
  235.   Turbo Assembler lines which are in need of conversion are of the
  236.   form:
  237.  
  238.       message-type source-file(LINE #) message-text
  239.  
  240.   where type is one of: Warning, Error
  241.  
  242.   TASM lines are identified by the first portion of text.  If
  243.   warning, error or fatal is determined at the outset, text is
  244.   output from there as it is scanned.  Any incorrect configuration
  245.   will simply abort the scanning of the rest of the line.
  246.   **********************************************************************/
  247.   int ProcessLine(char *Line)
  248.   {
  249.      char     Type;
  250.      unsigned i;
  251.      char     *s;
  252.        char     fn[MAXPATH];
  253.  
  254.      /* don't try to process a NULL line */
  255.      if (Line[0] == 0)
  256.         return 0;
  257.  
  258.      /* check for temc type tags */
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.   PRODUCT  :  Borland C++                            NUMBER  :  730
  273.   VERSION  :  2.0
  274.        OS  :  DOS
  275.      DATE  :  February 25, 1992                        PAGE  :  5/7
  276.  
  277.     TITLE  :  Example Source Code for TEMC Filter
  278.  
  279.  
  280.  
  281.  
  282.      if (strncmp(Line,TemcWarningTxt,strlen(TemcWarningTxt))== 0)
  283.         memmove(Line,&Line[strlen(TemcWarningTxt)],strlen(Line));
  284.      e